package com.cms.recursoshumanos.activity.beneficios_lot;

import java.util.ArrayList;
import java.util.List;

import com.example.frontendrecursoshumanos.R;
import com.cms.recursoshumanos.activity.beneficios_lot.DetailInformacionBeneficiosPopUp.BeneficioDialogListener;
import com.cms.recursoshumanos.activity.main.MainRecursosHumanosActivity;
import com.cms.recursoshumanos.cache.ListaBeneficiosAdmCache;
import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.handler.BeneficiosAdministrativosActivityHandler;
import com.cms.recursoshumanos.object.BeneficioAdministrativo;
import com.cms.recursoshumanos.object.Usuario;
import com.cms.recursoshumanos.object.list.ListaBeneficioAdministrativo;
import com.cms.recursoshumanos.utilities.Tool;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class ListaBeneficiosAdmActivity extends MainRecursosHumanosActivity
{
	
	private static BeneficioAdmAdapter adaptador;
	
	protected static DiaBeneficioAsync asyncDiaBeneficioTask;
	protected static PlanillaBeneficioAsync asyncPlanillaBeneficioTask;
	protected static BeneficioAdmAsync asyncListaBeneficioTask;
	
	private static ListView listViewBeneficio;
	private static LinearLayout layout_cantidad;
	private static TextView cantidad_listado;
	private static EditText buscador;
	
	private static ListaBeneficioAdministrativo listado;
	private static Usuario elUsuario;
	
	private ProgressDialog dialog;

	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lista_beneficios_adm);
		elUsuario = UserInfoCache.getInstance().getUsuario();
		listado = ListaBeneficiosAdmCache.getInstance().getListaBeneficio();
		setCompenents();
	}
	@Override
	protected void onResume() 
	{
		super.onResume();
		if (listado == null)
		{
			goPaginaPrincipal(ListaBeneficiosAdmActivity.this);
		}
		if (elUsuario == null)
		{		
			elUsuario = UserInfoCache.getInstance().getUsuario();
		}
	}

	
	public void onRefreshClick(View v)
	{
		refreshBeneficioAdministrativo();
	}
	
	protected void refreshBeneficioAdministrativo()
	{
		asyncListaBeneficioTask = new BeneficioAdmAsync(elUsuario);
		asyncListaBeneficioTask.execute();
	}
	public void goBeneficioAdm()
	{
		Intent intent = new Intent(ListaBeneficiosAdmActivity.this, ListaBeneficiosAdmActivity.class);
		startActivity(intent);
	}
	public void getPlanillaBeneficio(BeneficioAdministrativo elBeneficio)
	{
		asyncPlanillaBeneficioTask = new PlanillaBeneficioAsync(UserInfoCache.getInstance().getUsuario());
		asyncPlanillaBeneficioTask.execute(elBeneficio);
	}
	public void getDiasBeneficio(BeneficioAdministrativo elBeneficio)
	{
		asyncDiaBeneficioTask = new DiaBeneficioAsync(UserInfoCache.getInstance().getUsuario());
		asyncDiaBeneficioTask.execute(elBeneficio);
	}
	public void setCompenents()
	{
		listViewBeneficio =  (ListView)  findViewById ( R.id.lvBeneficioAdm );

		layout_cantidad = (LinearLayout) findViewById(R.id.llTituloListaBeneficio);
		cantidad_listado = (TextView) layout_cantidad.findViewById(R.id.tvCantidadBeneficio);
		buscador = (EditText) findViewById(R.id.etSearch);
		
		buscador.addTextChangedListener(new TextWatcher() 
		{

			   public void afterTextChanged(Editable s)
			   {
			   }

			   public void beforeTextChanged(CharSequence s, int start, int count, int after) 
			   {

			   }

			   public void onTextChanged(CharSequence s, int start, int before, int count) 
			   {
				   
				   int textlength = buscador.getText().length();
				   
				   if (textlength == 0)
				   {
					   setListadoCompleto();
				   }
				   else
				   {
					   setListadoParam();
				   }

			   }
		});
		setListadoCompleto();
	}
	
	public void setListadoCompleto()
	{
		adaptador = new  BeneficioAdmAdapter(this, listado.getListaBeneficioAdministrativo());
		cantidad_listado.setText("Se encontraron "+	listado.cantElementListaBeneficioAdministrativo()+	" registro(s).");
		listViewBeneficio.setAdapter(adaptador);
	}
	public void setListadoParam()
	{
		int textlength = buscador.getText().length();
		List<BeneficioAdministrativo> listado_beneficio_adm_mostrar = new ArrayList<BeneficioAdministrativo>();
		   
		for (int i = 0; i < listado.cantElementListaBeneficioAdministrativo(); i++) 
		{
			BeneficioAdministrativo beneficio_adm_aux = listado.getBeneficioAdministrativoAtIndex(i);
	   
			String nombre_beneficio = ""+beneficio_adm_aux.getNombreBeneficioAdministrativo();
	   
			if (textlength <= nombre_beneficio.length()) 
			{
				if (buscador.getText().toString().equalsIgnoreCase(  (String) nombre_beneficio.subSequence(0,textlength))) 
				{
					listado_beneficio_adm_mostrar.add(beneficio_adm_aux);
				}
			}
		}
		
		cantidad_listado.setText("Se encontraron "+	listado_beneficio_adm_mostrar.size()+" registro(s).");
		adaptador = new BeneficioAdmAdapter(this, listado_beneficio_adm_mostrar);
		listViewBeneficio.setAdapter(adaptador);
	}
	public void goInformacionBeneficioAdm(BeneficioAdministrativo elBeneficio)
	{
		Intent intent = new Intent(ListaBeneficiosAdmActivity.this, InfoBeneficioAdmActivity.class);
		
		Bundle bundle = new Bundle();
		bundle.putString("id_beneficio", ""+ elBeneficio.getIdBeneficioAdministrativo());
		intent.putExtras(bundle);
		
		startActivity(intent);
	}
	public void getBeneficioAdministrativoPopUp(BeneficioAdministrativo elBeneficio)
	{
		
		DetailInformacionBeneficiosPopUp detailInfoBenefPopUp = 
				new DetailInformacionBeneficiosPopUp(this, elBeneficio, new BeneficioDialogListener() 
				{
					
					@Override
					public void GetInformacionBeneficio(
							BeneficioAdministrativo elBeneficioAdministrativo) 
					{
						
						goInformacionBeneficioAdm(elBeneficioAdministrativo);
					}
					
					@Override
					public void EnviarPlanilla(
							BeneficioAdministrativo elBeneficioAdministrativo) 
					{
						getPlanillaBeneficio(elBeneficioAdministrativo);
					}
					
					@Override
					public void EnviarDias(
							BeneficioAdministrativo elBeneficioAdministrativo) 
					{
						getDiasBeneficio(elBeneficioAdministrativo);
					}
				});
		detailInfoBenefPopUp.show();
		
		
	}
	public void refresh_lista()
	{
		listado = ListaBeneficiosAdmCache.getInstance().getListaBeneficio();
		setListadoCompleto();
	}
	public class BeneficioAdmAdapter extends ArrayAdapter<BeneficioAdministrativo> 
	{
	    LayoutInflater mInflater ;  
	    private List<BeneficioAdministrativo> mItems ;
	    private ViewHolder holder;
	 
	    public BeneficioAdmAdapter  ( Context context , List<BeneficioAdministrativo> items)  
	    {
	        super ( context, -1, items )  ;
	        this.mItems = items ;
	        //this.mItems.add(0, new TipoArticulo(0, "Todas las Categorias", null));
	        this.mInflater = LayoutInflater.from(context) ;
	    }
	    
	    @ Override
	    public View getView ( final int position, View convertView, ViewGroup parent )  
	    {
	            // Inflate the custom view
    		if (convertView == null)
    		{
    			convertView =   mInflater.inflate( R.layout.elementos_lista_tipo_objeto_item,null);    		
        		convertView.setOnClickListener(new OnClickListener() 
        		{
    				
    				@Override
    				public void onClick(View v) 
    				{
    					getBeneficioAdministrativoPopUp(mItems.get(position));
    					
    				}
    			});
        		
        		holder = new ViewHolder();
	    		holder.nombreTipoArticulo = (TextView) convertView.findViewById(R.id.tvNombreTipoObject);	
	    		convertView.setTag(holder);
    		}
	    	else
	    	{
	    		holder = (ViewHolder)convertView.getTag();
	    	}
	    	
    		holder.nombreTipoArticulo.setText(mItems.get(position).getNombreBeneficioAdministrativo());
    		
	        return convertView ;
	    }
	    private class ViewHolder 
	    {    	  
        	  TextView  nombreTipoArticulo;
        }
	}
	
	private class BeneficioAdmAsync extends AsyncTask<String, Void, String>
	{
		
		private Usuario elUsuario;
		
		public BeneficioAdmAsync(Usuario elUsuario)
		{
			this.elUsuario = elUsuario;
		}
		
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(ListaBeneficiosAdmActivity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			BeneficiosAdministrativosActivityHandler handler = new BeneficiosAdministrativosActivityHandler();
			String result = handler.refreshBeneficiosAdministrativos(this.elUsuario.getNombre_Usuario(),
																		this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				refresh_lista();
			}
			else 
			{
				Tool.getInstance().showMessage(str_result);
			}
			dialog.cancel();
			this.cancel(true);
			
		}
		
	}
	private class PlanillaBeneficioAsync extends AsyncTask<BeneficioAdministrativo, Void, String>
	{
		
		private ProgressDialog dialog;
		private BeneficioAdministrativo elBeneficioAdministrativo;
		
		private Usuario elUsuario;
		
		public PlanillaBeneficioAsync(Usuario elUsuario)
		{
			this.elUsuario = elUsuario;
		}
		

		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(ListaBeneficiosAdmActivity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(BeneficioAdministrativo... arg0) 
		{
			
			elBeneficioAdministrativo = arg0[0];
			
			BeneficiosAdministrativosActivityHandler handler = new BeneficiosAdministrativosActivityHandler();
			String result = handler.getPlanillaBeneficiosAdministrativos(this.elUsuario.getNombre_Usuario(),
																			this.elUsuario.getPassword(),
																			elBeneficioAdministrativo);
			return result;
		}
		
		@Override
		public void onPostExecute(String result)
		{
			dialog.cancel();
			String str_result = result;
			
			Tool.getInstance().showMessagePlanillas(str_result);
			
		}
	}
	private class DiaBeneficioAsync extends AsyncTask<BeneficioAdministrativo, Void, String>
	{
		
		private ProgressDialog dialog;
		private BeneficioAdministrativo elBeneficioAdministrativo;
		
		private Usuario elUsuario;
		
		public DiaBeneficioAsync(Usuario elUsuario)
		{
			this.elUsuario = elUsuario;
		}
		

		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(ListaBeneficiosAdmActivity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(BeneficioAdministrativo... arg0) 
		{
			
			elBeneficioAdministrativo = arg0[0];
			
			BeneficiosAdministrativosActivityHandler handler = new BeneficiosAdministrativosActivityHandler();
			String result = handler.getAcumBeneficio(this.elUsuario.getNombre_Usuario(),
														this.elUsuario.getPassword(),
														elBeneficioAdministrativo);
			return result;
		}
		
		@Override
		public void onPostExecute(String result)
		{
			dialog.cancel();
			String str_result = result;
			
			Tool.getInstance().showMessagePeticion(str_result);
			
		}
	}

}
